﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace CoTuong
{
    [Serializable]
    public class QuanPhao : QuanCo
    {
        public QuanPhao(Texture2D texture2D, int dong, int cot, int quan, Boolean isSelected)
            : base(texture2D, dong, cot, quan, isSelected)
        {
        }

        public override void Update(GameTime gameTime)
        {
            if (isSelected == true)
            {
                #region Di Chuyển Bên Dưới Pháo
                for (int i = dong + 1; i < 10; i++)
                {
                    if (QuanLyQuanCo.ktQuanCo[i, cot] != 0)
                    {
                        for (int j = i + 1; j < 10; j++)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 2)
                            {
                                this.diChuyen(j, cot);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 1)
                            {
                                this.diChuyen(j, cot);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 2))
                                break;
                        }
                        break;
                    }
                    this.diChuyen(i, cot);
                }
                #endregion

                #region Di Chuyển Bên Trên Pháo
                for (int i = dong - 1; i >= 0; i--)
                {
                    if (QuanLyQuanCo.ktQuanCo[i, cot] != 0)
                    {
                        for (int j = i - 1; j >= 0; j--)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 2)
                            {
                                this.diChuyen(j, cot);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 1)
                            {
                                this.diChuyen(j, cot);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 2))
                                break;
                        }
                        break;
                    }
                    this.diChuyen(i, cot);
                }
                #endregion

                #region Di Chuyển Bên Phải Pháo
                for (int i = cot + 1; i < 9; i++)
                {
                    if (QuanLyQuanCo.ktQuanCo[dong, i] != 0)
                    {
                        for (int j = i + 1; j < 9; j++)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 2)
                            {
                                this.diChuyen(dong, j);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 1)
                            {
                                this.diChuyen(dong, j);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 2))
                                break;
                        }
                        break;
                    }
                    this.diChuyen(dong, i);
                }
                #endregion

                #region Di Chuyển Bên Trái Pháo
                for (int i = cot - 1; i >= 0; i--)
                {
                    if (QuanLyQuanCo.ktQuanCo[dong, i] != 0)
                    {
                        for (int j = i - 1; j >= 0; j--)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 2)
                            {
                                this.diChuyen(dong, j);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 1)
                            {
                                this.diChuyen(dong, j);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 2))
                                break;
                        }
                        break;
                    }
                    this.diChuyen(dong, i);
                }
                #endregion

                ViTriDiChuyen.X = -framesizeX;
                ViTriDiChuyen.Y = -framesizeY;
            }

            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            if (isSelected == true)
            {
                #region Vẽ Vị Trí Bên Dưới Pháo
                for (int i = dong + 1; i < 10; i++)
                {
                    if (QuanLyQuanCo.ktQuanCo[i, cot] != 0)
                    {
                        for (int j = i + 1; j < 10; j++)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 2)
                            {
                                this.VeBuocDiQuanCo(j, cot, spriteBatch);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 1)
                            {
                                this.VeBuocDiQuanCo(j, cot, spriteBatch);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 2))
                                break;
                        }
                        break;
                    }
                    this.VeBuocDiQuanCo(i, cot, spriteBatch);
                }
                #endregion

                #region Vẽ Vị Trí Bên Trên Pháo
                for (int i = dong - 1; i >= 0; i--)
                {
                    if (QuanLyQuanCo.ktQuanCo[i, cot] != 0)
                    {
                        for (int j = i - 1; j >= 0; j--)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 2)
                            {
                                this.VeBuocDiQuanCo(j, cot, spriteBatch);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 1)
                            {
                                this.VeBuocDiQuanCo(j, cot, spriteBatch);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[j, cot] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[j, cot] == 2))
                                break;
                        }
                        break;
                    }
                    this.VeBuocDiQuanCo(i, cot, spriteBatch);
                }
                #endregion

                #region Vẽ Vị Trí Bên Phải Pháo
                for (int i = cot + 1; i < 9; i++)
                {
                    if (QuanLyQuanCo.ktQuanCo[dong, i] != 0)
                    {
                        for (int j = i + 1; j < 9; j++)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 2)
                            {
                                this.VeBuocDiQuanCo(dong, j, spriteBatch);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 1)
                            {
                                this.VeBuocDiQuanCo(dong, j, spriteBatch);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 2))
                                break;
                        }
                        break;
                    }

                    this.VeBuocDiQuanCo(dong, i, spriteBatch);
                }
                #endregion

                #region Vẽ Vị Trí Bên Trái Pháo
                for (int i = cot - 1; i >= 0; i--)
                {
                    if (QuanLyQuanCo.ktQuanCo[dong, i] != 0)
                    {
                        for (int j = i - 1; j >= 0; j--)
                        {
                            if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 2)
                            {
                                this.VeBuocDiQuanCo(dong, j, spriteBatch);
                                break;
                            }
                            else if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 1)
                            {
                                this.VeBuocDiQuanCo(dong, j, spriteBatch);
                                break;
                            }
                            if ((quan == 0 && QuanLyQuanCo.ktQuanCo[dong, j] == 1) ||
                                (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, j] == 2))
                                break;
                        }
                        break;
                    }

                    this.VeBuocDiQuanCo(dong, i, spriteBatch);
                }
                #endregion

            }

            base.Draw(gameTime, spriteBatch);
        }
    }
}
